package sortlearn

import (
	"fmt"
	"sort"
)

type Course struct {
	Name  string
	Price int
	Url   string
}

//声明课程切片类型，对这个类型，实现相关的协议
type Courses []Course

func (c Courses) Len() int {
	return len(c)
}

func (c Courses) Less(i, j int) bool {
	return c[i].Price < c[j].Price
}

func (c Courses) Swap(i, j int) {
	c[i], c[j] = c[j], c[i]
}

func SortLearnForInterface() {
	//通过sort来排序
	//让你写一个排序算法，冒泡，插入，快速，归并，桶排序。本质是一样的，比较
	//你的排序算法能否应付各种类型的排序
	//data := []int{1, 2, 6, 3, 7, 5} //slice类型不支持排序，因为没有实现相关的接口
	//sort.Sort(data) //协议

	courses := Courses{
		Course{"django", 100, ""},
		Course{"golang", 400, ""},
		Course{"scrapy", 300, ""},
		Course{"sanic", 200, ""},
	}
	sort.Sort(courses) //协议,你的目的不是要告诉别人具体的类型，重要的是你的类型必须要提供具体的方法
	for _, v := range courses {
		fmt.Println(v)
	}
}
